Die Anforderung, dass man mit GPIO-Eingängen eine virtuelle Maus am System erstellt, ist mit dem Raspberry Pi sehr einfach umzusetzen. Ein paar GPIOs und ein paar Zeilen C-Code reichen.
Aufgabe
Es gibt verschiedene Game-HATs oder auch Gaming Gehäuse für den Raspberry Pi. Die werden zumeist für die Emulation von alten Konsolen wie Gameboy, NES, Mega Drive usw. verwendet. Was ist aber wenn man sie für Point-and-Click-Adventure oder alte DOS-Spiele benutzen will. Dann würde man eine Maus benötigen oder zumindest eine Maus Emulation. ScummVM kann den analogen Stick eines Joysticks oder Joypads als Maus interpretieren. Dazu muss man in der Konfigurationsdatei “/home/pi/.config/scummvm/scummvm.ini” das Joypad mit dem Eintrag “joystick_num=0” hinzufügen. Was aber wenn man gar keinen analogen Stick bzw. Eingabemöglichkeit hat. Dann könnte man mit wenigen Codezeilen eine Mausemulation via GPO-Eingänge realisieren.
uinput Bibliothek
uinput ist ein Kernelmodul, mit dem Eingabegeräte aus dem Userspace emuliert werden können. Durch Schreiben auf das Gerät /dev/uinput kann ein Programm ein virtuelles Eingabegerät mit bestimmten Funktionen erstellen. Dieses Eingabegerät kann eine Tastatur, Maus oder Joypad bzw. Joystick sein.
libsuinput ist eine einfache C-Bibliothek die den Zugriff auf uinput etwas erleichtert. Es ist kein Hexenwerk direkt ohne Bibliothek zu arbeiten, in dem Fall benutzen wir aber die Bibliothek umso den Programmieraufwand zu reduzieren.
Zuerst muss die Library aus den Sourcecode erstellt und dann am System installiert werden.
git clone https://github.com/tuomasjjrasanen/libsuinput.git
cd libsuinput
sudo apt-get install libtool
./autogen.sh
./configure && make
sudo make install
sudo sh -c "echo /usr/local/lib > /etc/ld.so.conf.d/user.conf"
sudo ldconfig
GPIO Schaltplan
Es werden mindestens 6 GPIO-Eingänge benötigt:
- Rauf
- Runter
- Links
- Rechts
- Linke Maustaste
- Rechte Maustaste
GPIO Maus
Das Programm führt folgende Schritte aus:
- Wiring Pi GPIO-Bibliothek initialisieren
- GPIO-Eingänge konfigurieren
- Maus Achsen und Tasten anlegen bzw. bekannt geben
- Bei entsprechenden GPIO-Eingang die Maus in X- oder Y-Richtung verschieben
- Bei entsprechenden GPIO-Eingang die Maustaste drücken
|
|
gcc -Wall -o gpiomouse gpiomouse.c -lsuinput -lwiringPi
sudo ./gpiomouse &
Wenn der Fehler “suinput_open: No such device” ausgegeben wird, so ist das uinput Device nicht verfügbar. Dann kann mit “sudo modprobe uinput” das Kernel-Modul geladen werden.
Testen mit ScummVM Emulation
Testen kann man die Funktion mit dem Point-and-Click-Adventure Emulationsprogramm ScummVM.
sudo apt-get install scummvm lure-of-the-temptress
scummvm
Danach kann man “Spiel hinzufügen” drücken und den Pfad “/usr/share/scummvm/lure-of-the-temptress/de” angeben, um das Spiel “Lure of the Temptress (DOS/German)” im Menü zu erhalten. Mit einem Doppelklick auf den Namen kann man das Speil dann starten, sofern die GPIO-Maus funktioniert.